package pixel;
import java.awt.*;
import javax.imageio.*;
import java.awt.image.*;
import java.io.*;
import javax.swing.*;

public class ImageSizer extends Component{
  protected BufferedImage bild;

  public ImageSizer(BufferedImage img, int wmax, int hmax){
    bild=resizeImage(img, wmax, hmax);
  }

  /**Erzeugt aus einem Original das größt mögliche Bild, das nicht breiter und
   * höher ist als die vorgegebenen Obergrenzen. Das Seitenvehältnis bleibt
   * erhalten.
   * @param orig das Originalbild
   * @param wmax die größte erlaubte Breite in Pixeln
   * @param hmax die größte erlaubte Höhe in Pixeln
   * @return das neu erzeugte Bild.
   */
  public static BufferedImage resizeImage(BufferedImage orig, int wmax, int hmax){
    if(orig==null) return null;
    int w=orig.getWidth();
    int h=orig.getHeight();
    if(h*wmax>w*hmax) wmax=(int)(w*1.0/h*hmax);
    else hmax=(int)(h*1.0/w*wmax);
    BufferedImage bild=new BufferedImage(wmax, hmax, BufferedImage.TYPE_INT_RGB);
    bild.getGraphics().drawImage(orig, 0, 0, wmax, hmax, 0, 0, w, h, null);
    return bild;
  }

  @Override
  public void paint(Graphics g){
    g.drawImage(bild, 0, 0, null);
  }
  
  @Override
  public Dimension getPreferredSize(){
    if(bild==null)
      return new Dimension(100,100);
    else
      return new Dimension(bild.getWidth(), bild.getHeight());
  }

  public BufferedImage getImage(){return bild;}
  
  public static void main(String[] args) throws IOException{
    String filename=args[0];
    int amax=Integer.parseInt(args[1]);
    int bmax=Integer.parseInt(args[2]);
    BufferedImage img=ImageIO.read(new File(filename));
    ImageSizer comp=new ImageSizer(img, amax, bmax);
    JFrame f=new JFrame("Bild-Normalisierer");
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.add(comp);
    f.pack();
    f.setVisible(true);
    img=comp.getImage();
    System.out.println("w="+img.getWidth()+" h="+img.getHeight());
  }
}